/**
 * 
 *  Este arquivo é parte do programa TODO Ver nome. TODO Ver nome é um software livre; você pode redistribui-lo e/ou 
 *  modifica-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); 
 *  na versão 2 da Licença, ou (na sua opnião) qualquer versão.
 *  
 *	Este programa é distribuido na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implicita
 *  de ADEQUAÇÂO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.
 *	Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa, se não, escreva para a Fundação do
 *	Software Livre(FSF) 
 *
 *	Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 * 
 */

package fullcalc.conversores.conversorbasenumerica;

import fullcalc.comum.enums.BaseNumerica;
import fullcalc.conversores.abstrata.AbstractConversorBaseNumerica;

/**
 * <p>
 * Classe que implementa as conversões de bases númericas nos tipos (Decimal;
 * Hexxadecimal; Octal e Binário).
 * </p>
 * 
 * @author Marcos Oliveira Soares
 * @author Willyan Guimarães Caetano
 * @author Thaís Medrado
 */
public class ConversorBaseNumerica extends
		AbstractConversorBaseNumerica<String> {

	@Override
	public void realizaConversaoMedidaBaseNumerica(BaseNumerica unidadeEntrada,
			BaseNumerica unidadeSaida, String valorEntrada) {

		if (unidadeEntrada.equals(BaseNumerica.DECIMAL)
				&& (unidadeSaida.equals(BaseNumerica.HEXADECIMAL))) {
			setResultado(Integer.toHexString(Integer.parseInt(valorEntrada)));
		}

		else if (unidadeEntrada.equals(BaseNumerica.DECIMAL)
				&& (unidadeSaida.equals(BaseNumerica.BINARIO))) {
			setResultado(Integer.toBinaryString(Integer.parseInt(valorEntrada)));
		}

		else if (unidadeEntrada.equals(BaseNumerica.DECIMAL)
				&& (unidadeSaida.equals(BaseNumerica.OCTAL))) {
			setResultado(Integer.toOctalString(Integer.parseInt(valorEntrada)));
		}

		else if (unidadeEntrada.equals(BaseNumerica.HEXADECIMAL)
				&& (unidadeSaida.equals(BaseNumerica.OCTAL))) {
			setResultado(Integer.toOctalString(Integer.parseInt(valorEntrada,
					16)));
		}

		else if (unidadeEntrada.equals(BaseNumerica.HEXADECIMAL)
				&& (unidadeSaida.equals(BaseNumerica.DECIMAL))) {
			int valorDeEntradaHexadecimal = Integer.parseInt(valorEntrada, 16);
			setResultado(String.valueOf(valorDeEntradaHexadecimal));
		}

		else if (unidadeEntrada.equals(BaseNumerica.HEXADECIMAL)
				&& (unidadeSaida.equals(BaseNumerica.BINARIO))) {
			int valorDeEntradaHexadecimal = Integer.parseInt(valorEntrada, 16);
			setResultado(Integer.toBinaryString(valorDeEntradaHexadecimal));
		}

		else if (unidadeEntrada.equals(BaseNumerica.OCTAL)
				&& (unidadeSaida.equals(BaseNumerica.HEXADECIMAL))) {
			setResultado(Integer.toHexString(Integer.parseInt(valorEntrada, 8)));
		}

		else if (unidadeEntrada.equals(BaseNumerica.OCTAL)
				&& (unidadeSaida.equals(BaseNumerica.DECIMAL))) {
			int valorDeEntradaHexadecimal = Integer.parseInt(valorEntrada, 8);
			setResultado(String.valueOf(valorDeEntradaHexadecimal));
		}

		else if (unidadeEntrada.equals(BaseNumerica.OCTAL)
				&& (unidadeSaida.equals(BaseNumerica.BINARIO))) {
			setResultado(Integer.toBinaryString(Integer.parseInt(valorEntrada)));
		}

		else if (unidadeEntrada.equals(BaseNumerica.BINARIO)
				&& (unidadeSaida.equals(BaseNumerica.DECIMAL))) {
			int valorDeEntradaBinario = Integer.parseInt(valorEntrada, 2);
			setResultado(String.valueOf(valorDeEntradaBinario));
		}

		else if (unidadeEntrada.equals(BaseNumerica.BINARIO)
				&& (unidadeSaida.equals(BaseNumerica.OCTAL))) {
			int valorDeEntradaBinarioConvertidoParaInteiro = Integer.parseInt(
					valorEntrada, 2);
			setResultado(Integer
					.toOctalString(valorDeEntradaBinarioConvertidoParaInteiro));
		}

		else if (unidadeEntrada.equals(BaseNumerica.BINARIO)
				&& (unidadeSaida.equals(BaseNumerica.HEXADECIMAL))) {
			int valorDeEntradaBinarioConvertidoParaInteiro = Integer.parseInt(
					valorEntrada, 2);
			setResultado(Integer
					.toHexString(valorDeEntradaBinarioConvertidoParaInteiro));
		}

	}

}